#include "videocompressor.h"
#include <QtCore/QProcess>
#include <QtCore/QDebug>

VideoCompressor::VideoCompressor(QObject *parent)
    : QObject(parent)
{
    initFFmpeg();
}

void VideoCompressor::initFFmpeg()
{
    // 创建进程对象检查FFmpeg是否安装
    QProcess process;
    process.start("ffmpeg -version");
    if (!process.waitForStarted()) {
        emit error("请先安装FFmpeg");
    }
}

void VideoCompressor::compress(const QString &inputPath, 
                             const QString &outputPath,
                             int quality)
{
    // 创建FFmpeg进程对象
    QProcess *ffmpeg = new QProcess(this);
    
    // 根据质量选择预设值
    QString preset;
    switch(quality) {
        case 0: preset = "slow"; break;    // 高质量，压缩慢
        case 1: preset = "medium"; break;  // 中等质量和速度
        case 2: preset = "fast"; break;    // 低质量，压缩快
        default: preset = "medium";
    }
    
    // 构建FFmpeg命令行参数
    QStringList arguments;
    arguments << "-i" << inputPath         // 输入文件
             << "-c:v" << "libx264"        // 使用H.264编码器
             << "-preset" << preset        // 压缩预设
             << "-crf" << "23"            // 压缩质量因子
             << outputPath;               // 输出文件
    
    // 连接错误信号
    connect(ffmpeg, &QProcess::errorOccurred, [this](QProcess::ProcessError error) {
        emit this->error("压缩过程出错");
    });
    
    // 连接完成信号
    connect(ffmpeg, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
            [this](int exitCode, QProcess::ExitStatus exitStatus) {
        if (exitCode == 0) {
            emit compressionFinished();  // 压缩成功
        } else {
            emit error("压缩失败");      // 压缩失败
        }
    });
    
    // 启动FFmpeg进程
    ffmpeg->start("ffmpeg", arguments);
} 